package com.wgh.cart.service;

import com.wgh.cart.entity.CartItem;
import com.wgh.common.vo.Result;
import java.util.List;

/**
 * 购物车服务接口
 */
public interface CartService {

    /**
     * 添加商品到购物车
     * @param userId 用户ID
     * @param productId 商品ID
     * @param skuId SKU ID
     * @param quantity 数量
     * @param attributes 商品属性
     * @return 添加结果
     */
    Result<Boolean> addToCart(Long userId, Long productId, Long skuId, Integer quantity, String attributes);

    /**
     * 更新购物车商品数量
     * @param userId 用户ID
     * @param cartItemId 购物车项ID
     * @param quantity 新数量
     * @return 更新结果
     */
    Result<Boolean> updateCartItemQuantity(Long userId, Long cartItemId, Integer quantity);

    /**
     * 更新购物车商品选中状态
     * @param userId 用户ID
     * @param cartItemId 购物车项ID
     * @param selected 是否选中
     * @return 更新结果
     */
    Result<Boolean> updateCartItemSelected(Long userId, Long cartItemId, Boolean selected);

    /**
     * 批量更新购物车商品选中状态
     * @param userId 用户ID
     * @param selected 是否选中
     * @return 更新结果
     */
    Result<Boolean> updateCartItemsSelected(Long userId, Boolean selected);

    /**
     * 从购物车中删除商品
     * @param userId 用户ID
     * @param cartItemId 购物车项ID
     * @return 删除结果
     */
    Result<Boolean> removeFromCart(Long userId, Long cartItemId);

    /**
     * 清空购物车
     * @param userId 用户ID
     * @return 清空结果
     */
    Result<Boolean> clearCart(Long userId);

    /**
     * 获取购物车列表
     * @param userId 用户ID
     * @return 购物车商品列表
     */
    Result<List<CartItem>> getCartList(Long userId);

    /**
     * 获取购物车中选中的商品
     * @param userId 用户ID
     * @return 选中的购物车商品列表
     */
    Result<List<CartItem>> getSelectedCartItems(Long userId);

    /**
     * 获取购物车商品数量
     * @param userId 用户ID
     * @return 购物车商品数量
     */
    Result<Integer> getCartItemCount(Long userId);
}